#!/bin/sh

g_testRoleMap=(invalid host device)

# 选择是host还是device
GetRole()
{
	echo 1.host
	echo 2.device
	read role"?please select test role:"
	
	if [ $role -ge ${#g_testRoleMap[*]} ]
	then
		echo invalid test role
		return 0
	fi
	
	# 将数字转化为字符串
	return $role
}

# 根据参数执行测试用例
# 第一个参数是角色host或者device
# 第二个参数是测试用例执行时需要的参数
ExecTest()
{
	printf "\e[32m==========$1 test==========\e[0m\n"
	# 读取相应目录下的用例文件
	for file in `ls $1`
	do
		# 如果是目录则不需要执行
		if test -d $1/$file
		then
			continue
		fi
		
		# 因为是手动用例,需要提示用户下一个要执行哪个用例,方便用例做相关动作
		printf "enter \e[32m 'n' \e[0m to execute next test case: \e[32m $file \e[0m "
		read isnext
		until [ $isnext == 'n' ]
		do
			printf "enter \e[32m 'n' \e[0m to execute next test case: \e[32m $file \e[0m "
			read isnext
		done

		# 按照传进来的参数执行用例
		printf "\e[32m============start $file testing==========\e[0m\n"
		cd $1
		chmod +x $file
		./$file $2
		cd -
		printf "\e[32m============end $file testing==========\e[0m\n"
	done
	
}

# 执行unit测试
ExecUnitTest()
{
	printf "\e[32m==========start unit test==========\e[0m\n"
	# 可以做一些unit测试定制化的动作
	ExecTest $1/unittest ""
}

# 执行fuzz测试
ExecFuzzTest()
{
	printf "\e[32m==========start fuzz test==========\e[0m\n"
	# 可以做一些Fuzz测试定制化的动作
	ExecTest $1/fuzztest "corpus -max_len=1000 -max_total_time=20 -rss_limit_mb=2048"
}

# ==============================main===================================

# 选择是host或device
GetRole
testRole=$?
if [ $testRole == 0 ]
then 
	return 0
fi
testRole=${g_testRoleMap[$testRole]}

# 选择是 unitTest还是fuzzTest
echo 1.unit test
echo 2.fuzz test
read testType"?please selete test type:"
# 根据输入选择执行不同的测试
case $testType in
	1)
	ExecUnitTest $testRole
	;;
	2)
	ExecFuzzTest $testRole
	;;
	*)
	echo invalid test type 
	;;
esac
